package com.the_last.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.the_last.pojo.po.Product;
import com.the_last.pojo.vo.ProductImportVO;
import com.the_last.utils.Result;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * @author zhanghaifeng
 * @description 针对表【product】的数据库操作Service
 * @createDate 2025-06-06 23:26:45
 */
public interface ProductService extends IService<Product> {
    
    /**
     * 获取商品信息（带缓存）
     *
     * @param id 商品ID
     * @return 商品信息
     */
    Result<Product> getProductWithCache(Integer id);
    
    /**
     * 获取商品列表（带缓存和双检锁）
     *
     * @param filterZeroStock 是否过滤0库存商品
     * @return 商品列表
     */
    Result<List<Product>> getProductListWithCache(Boolean filterZeroStock);
    
    /**
     * 新增商品
     *
     * @param product 商品信息
     * @return 新增结果
     */
    Result<Void> addProduct(Product product);
    
    /**
     * 更新商品信息
     *
     * @param product 商品信息
     * @return 更新结果
     */
    Result<Void> updateProduct(Product product);
    
    /**
     * 删除商品
     *
     * @param id 商品ID
     * @return 删除结果
     */
    Result<Void> deleteProduct(Integer id);
    
    /**
     * Excel批量导入商品
     *
     * @param file Excel文件
     * @return 导入结果
     */
    Result<ProductImportVO> importProducts(MultipartFile file);
    
    
    /**
     * 同步Redis中的商品数据到数据库
     * 将Redis中的销量和库存数据同步到数据库中
     */
    void syncProductDataFromRedisToDatabase();
    
    /**
     * 导出商品数据
     *
     * @param response HTTP响应
     */
    void exportProducts(HttpServletResponse response);
}
